+2008-07-21 Cody Russell <bratsche@gnome.org>
+
+ Bug 153567 – Repaint glitches in widgets
+
+ * gdk/win32/gdkevents-win32.c: Set a sync timer when
+ we receive WM_SYNCPAINT, and RedrawWindow() once
+ the timer expires.
+
2008-07-21 Michael Natterer <mitch@imendio.com>
* gtk/gtktoolbar.c (gtk_toolbar_class_init): use the simpler
static gboolean in_ime_composition = FALSE;
static UINT modal_timer;
+static UINT sync_timer = 0;
static int debug_indent = 0;
static VOID CALLBACK
modal_timer_proc (HWND hwnd,
- UINT msg,
- UINT id,
- DWORD time)
+ UINT msg,
+ UINT id,
+ DWORD time)
{
if (_sizemove_in_progress)
handle_stuff_while_moving_or_resizing ();
}
+static VOID CALLBACK
+sync_timer_proc (HWND hwnd,
+ UINT msg,
+ UINT id,
+ DWORD time)
+{
+ MSG message;
+ if (PeekMessageW (&message, hwnd, WM_PAINT, WM_PAINT, PM_REMOVE))
+ {
+ return;
+ }
+
+ RedrawWindow (hwnd, NULL, NULL, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN);
+
+ KillTimer (hwnd, sync_timer);
+}
+
static void
handle_display_change (void)
{
*ret_valp = 1;
break;
+ case WM_SYNCPAINT:
+
+ sync_timer = SetTimer (GDK_WINDOW_HWND (window),
+ 1,
+ 200, sync_timer_proc);
+ break;
+
case WM_PAINT:
handle_wm_paint (msg, window, FALSE, NULL);
break;